Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Dec 18, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/5998

🧭 풀이 시간

20분

👀 체감 난이도

✏️ 문제 설명

정점 N개 간선 M개인 그래프가 주어지고, 각 정점에는 전구와 스위치가 하나씩 있다.
처음에 모든 전구는 꺼져있고, 정점에 있는 스위치를 누르면 해당 정점을 포함하여 인접한 모든 정점의 전구 상태가 바뀐다. (ON <-> OFF)

모든 전구를 켜기 위해 눌러야 하는 스위치의 최소 개수를 구해보자.

🔍 풀이 방법

전구들의 상태를 비트마스킹으로 관리한다. 비트가 0이면 꺼져있는 상태, 1이면 켜져있는 상태

i번 정점의 스위치를 눌렀을 때는 i번 정점을 포함하여 인접한 정점들의 비트를 반전(XOR)시키면 된다.

전구를 같은 크기의 두 그룹으로 나누어서, 각 그룹에서 전구를 켜고 끄는 모든 경우의 수에 대한 비트마스킹의 집합을 구하고 각각 A, B라고 하자.
A에 p라는 비트마스킹이 존재한다면, B에는 ((1<<N)-1) ^ p라는 비트마스킹이 존재해야 한다.
-> B를 Map으로 관리하면 빠르게 구할 수 있다.

A를 반복문으로 돌리면서 B에서 가능한 경우를 찾아내고, 모든 경우에 대한 스위치 작동횟수의 최솟값을 구했다.

⏳ 회고

ez

@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Dec 18, 2025
@ShinHeeEul ShinHeeEul merged commit 8e6be22 into main Dec 18, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants